package org.agent.aigccore.controller.log;

import jakarta.annotation.Resource;
import org.agent.aigccore.core.service.log.LogService;
import org.agent.aigccore.model.dto.LogQueryDTO;
import org.agent.aigccore.model.po.OpsLogPO;
import org.agent.aigccore.model.vo.PageResultVO;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;

/**
 * 日志查询Controller
 * 提供日志查询的REST API接口
 */
@RestController
@RequestMapping("/api/logs")
public class LogController {

    @Resource
    private LogService logService;

    /**
     * 分页查询日志
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    @PostMapping("/query")
    public ResponseEntity<PageResultVO<OpsLogPO>> queryLogs(@RequestBody LogQueryDTO queryDTO) {
        return ResponseEntity.ok(logService.queryLogs(queryDTO));
    }

    /**
     * 根据ID查询日志
     * @param id 日志ID
     * @return 日志信息
     */
    @GetMapping("/{id}")
    public ResponseEntity<OpsLogPO> getLogById(@PathVariable Long id) {
        return ResponseEntity.ok(logService.getLogById(id));
    }

    /**
     * 根据请求ID查询日志
     * @param requestId 请求ID
     * @return 日志列表
     */
    @GetMapping("/request/{requestId}")
    public ResponseEntity<List<OpsLogPO>> getLogsByRequestId(@PathVariable String requestId) {
        return ResponseEntity.ok(logService.getLogsByRequestId(requestId));
    }

    /**
     * 获取日志聚合统计
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    @GetMapping("/stats")
    public ResponseEntity<List<Map<String, Object>>> getLogStats(
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime startTime,
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime endTime) {
        return ResponseEntity.ok(logService.getLogStats(startTime, endTime));
    }

    /**
     * 获取日志趋势统计
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param interval 时间间隔（如1h, 1d）
     * @return 趋势统计结果
     */
    @GetMapping("/trend")
    public ResponseEntity<List<Map<String, Object>>> getLogTrend(
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime startTime,
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime endTime,
            @RequestParam String interval) {
        return ResponseEntity.ok(logService.getLogTrend(startTime, endTime, interval));
    }
}